﻿using MathNet.Symbolics;

namespace Cuofrisp.Core
{
    public sealed class CuofrispResult
    {
        public CuofrispResult(int variableCount)
        {
            this.VariableCount = variableCount;
            this.Variables = new SymbolicExpression[
                variableCount];
            this.Metric = new SymbolicExpression[
                variableCount, variableCount];
            this.MetricInverse = new SymbolicExpression[
                variableCount, variableCount];
            this.MetricDerivative = new SymbolicExpression[
                variableCount, variableCount, variableCount];
            this.Christoffel = new SymbolicExpression[
                variableCount, variableCount, variableCount];
            this.ChristoffelDerivative = new SymbolicExpression[
                variableCount, variableCount, variableCount, variableCount];
            this.Curvature = new SymbolicExpression[
                variableCount, variableCount, variableCount, variableCount];
        }

        public int VariableCount { get; }
        public SymbolicExpression[] Variables { get; }
        public SymbolicExpression[,] Metric { get; }
        public SymbolicExpression[,] MetricInverse { get; }
        public SymbolicExpression[,,] MetricDerivative { get; }
        public SymbolicExpression[,,] Christoffel { get; }
        public SymbolicExpression[,,,] ChristoffelDerivative { get; }
        public SymbolicExpression[,,,] Curvature { get; }
    }
}